﻿// --------------------------------------------------------------------------------------------------------------------
// <copyright file="IServiceBase.cs" company="BS - Desenvolvemento">
//   Desenvolvimento de solucoes tecnologicas para automacao em geral
// </copyright>
// <summary>
//   A interface de servico base.
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace ProjetoModeloDDD.Domain.Interfaces.Services
{
    using System.Collections.Generic;

    /// <summary>
    /// A interface de servico base.
    /// </summary>
    /// <typeparam name="TEntity">
    /// Entidade generica do tipo class.
    /// </typeparam>
    public interface IServiceBase<TEntity> where TEntity : class
    {
        /// <summary>
        /// Metodo add.
        /// </summary>
        /// <param name="obj">
        /// O obijeto a ser adicionado.
        /// </param>
        void Add(TEntity obj);

        /// <summary>
        /// Metodo que retorna um objeto pelo id consultado.
        /// </summary>
        /// <param name="id">
        /// O id a ser consultado.
        /// </param>
        /// <returns>
        /// O objeto generico a ser retornado.
        /// </returns>
        TEntity GetById(int id);

        /// <summary>
        /// Metodo para retornar uma lista com todos os objetos.
        /// </summary>
        /// <returns>
        /// A lista de objetos a ser retornada.
        /// </returns>
        IEnumerable<TEntity> GetAll();

        /// <summary>
        /// Metodo para atualizar um objeto.
        /// </summary>
        /// <param name="obj">
        /// Objeto a ser atualizado
        /// </param>
        void Update(TEntity obj);

        /// <summary>
        /// Metodo para  remover um objeto.
        /// </summary>
        /// <param name="obj">
        /// Objeto a ser removido
        /// </param>
        void Remove(TEntity obj);

        /// <summary>
        /// Metodo dispose.
        /// </summary>
        void Dispose();
    }
}